// 使用cookie模拟会员登录、浏览和退出操作

// 1. 导入express、cookie-parser
const express = require("express");
const cookieParser = require("cookie-parser");
// 2. 创建一个app应用
const app = express();
// 通过中间件使用cookie
app.use(cookieParser());
// （中间件）使用编码处理post请求参数
app.use(express.urlencoded({ extended: true }));
// 配置模板引擎
app.set("view engine" , "ejs");
// 配置模板的存放目录
app.set("views","./views");

// 3. 设置多个请求路由，并作出响应
// (get /) 首页,不用登录可以直接访问
app.get("/", (req, res) => {
   // 尝试获取登录的cookie信息
   let loginuser = req.cookies.loginuser;
   res.render("users/index",{loginuser}); // 将登录的cookie信息放置到模板中
});
// (get /login) 会员登录表单页
app.get("/login", (req, res) => {
    // 尝试获取登录的cookie信息
    let loginuser = req.cookies.loginuser;
    res.render("users/login", {errinfo:"", loginuser});
});
// (post /doLogin) 执行会员登录操作
app.post("/doLogin", (req, res) => {
    // 获取登录信息
    const data = req.body;
    // 尝试获取登录的cookie信息
    let loginuser = req.cookies.loginuser;
    // 执行登录验证
    if( data.uname == "zhangsan" && data.upass == "123456"){
        //登录成功, 使用cookie记录登录成功信息,跳转网站首页
        res.cookie("loginuser", data.uname, {maxAge: 60*60*1000});
        res.redirect("/");
    } else {
        // 登录失败：重新加载登录模板表单页，并显示错误信息，让会员重新登录。
        res.render("users/login",{errinfo:"登录账号或密码错误！",loginuser});
    }
});

// (get /news) 新闻浏览页，需要登录
app.get("/news", (req, res) => {
    // 尝试获取登录的cookie信息
    let loginuser = req.cookies.loginuser;
    // 判断是否登录，若没有则跳转登录页
    if (!loginuser){
        res.redirect("/login");
        return;
    }
    res.render("users/news",{loginuser});
});
// (get /about) 关于我们页，需要登录
app.get("/about", (req, res) => {
    // 尝试获取登录的cookie信息
    let loginuser = req.cookies.loginuser;
    // 判断是否登录，若没有则跳转登录页
    if (!loginuser){
        res.redirect("/login");
        return;
    }
    res.render("users/about",{loginuser});
});
// (get /logout) 会员退出操作
app.get("/logout", (req, res) => {
    // 执行cookie信息的删除
    res.clearCookie("loginuser");
    // 跳转到首页
    res.redirect("/");
});

// 4. 设置监听端口，并开启服务
app.listen(3000, () => {
    console.log("服务已开启，端口：3000");
});